Циклы организуются на основе команд условного перехода. Одна из таких команд jcxz. Переход будет выполнен по ней только в том случае, если в регистре CX находится ноль. Создаем программу:
MODEL TINY
STACK 256
DATASEG
Hellostr DB 'Hello First Step Site '
CODESEG
start:
mov ax,@data
mov ds,ax
mov cx,4
w1:
dec cx
push cx
mov bx,1
mov cx,21
mov dx,offset Hellostr
mov ah,40h
int 21h
pop cx
jcxz endprog
jmp w1
endprog:
mov ah,04Ch
mov al,1h
int 21h
end start
Так как для перехода используется регистр CX и этот же регистр используется для вывода символов в функции 40h, то нам его придется помещать в стек и извлекать из стека. Смотрим:
mov cx,4 w1: dec cx push cx
Задаем начальное значение на единицу больше, потом метка, а потом сразу его уменьшаем и сохраняем в стек. После вывода строки восстанавливаем из стека о команда jcxz проверяет на ноль, если не ноль, то назад к метке w1 и на единицу меньше.
pop cx jcxz endprog
Запускаем:
